home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / amig(ad)os / ringard'production / primes / src / primes.c next >
C/C++ Source or Header  |  1977-12-31  |  2KB  |  100 lines

  1. #include "carac.h"
  2. #include <proto/dos.h>
  3. #include <proto/exec.h>
  4. #include <exec/execbase.h>
  5. #include <exec/memory.h>
  6. #include <proto/mathieeesingtrans.h>
  7. #include <proto/mathieeesingbas.h>
  8. #include <proto/timer.h>
  9. #include <devices/timer.h>
  10.  
  11. #define MEM MEMF_PUBLIC|MEMF_CLEAR
  12. #define TEMPLATE "MAXIMUM/N"
  13. #define TXT GRAS"\n   Primes 1.0"NORM"\n\n   © Allenbrand Brice 1996\n\n   Ringard'Production\n\n   "ITALIK"Usage : Primes Maximum\n\n"NORM
  14. #define VER "$VER: Primes 1.0 ** "__DATE__
  15.  
  16. __saveds int main(void)
  17. {
  18.  struct RDArgs *rdargs;
  19.  int opts[]={0,0};
  20.  static char pipo[]=VER;
  21.  unsigned int i,j,k,a,b;
  22.  char *s;
  23.  struct DosLibrary *DOSBase;
  24.  struct Library *MathIeeeSingTransBase;
  25.  struct Library *MathIeeeSingBasBase;
  26.  struct Library *TimerBase;
  27.  long Err;
  28.  struct timerequest *tr;
  29.  struct timeval aa,bb;
  30.  
  31.  if(DOSBase=(struct DosLibrary *)OpenLibrary("dos.library",37))
  32.  {
  33.   if(MathIeeeSingTransBase=(struct Library *)OpenLibrary("mathieeesingtrans.library",0))
  34.   {
  35.    if(MathIeeeSingBasBase=(struct Library *)OpenLibrary("mathieeesingbas.library",0))
  36.    {
  37.     if(tr=(struct timerequest *)AllocVec(sizeof(struct timerequest),MEM))
  38.     {
  39.      if(!(Err=OpenDevice("timer.device",UNIT_MICROHZ,(struct IORequest *)tr,0)))
  40.      {
  41.       TimerBase=(struct Library *)tr->tr_node.io_Device;
  42.       if(rdargs=ReadArgs(TEMPLATE,(long *)opts,NULL))
  43.       {
  44.        if(opts[0])
  45.        {
  46.         i=*((int *)(opts[0]));
  47.         k=(IEEESPFix(IEEESPSqrt(IEEESPFlt(i)))+1)>>1;
  48.         i++;
  49.         i>>=1;
  50.         if(s=AllocVec(i+1,MEM))
  51.         {
  52.          GetSysTime(&aa);
  53.          j=2;
  54.          while(j<=k)
  55.          {
  56.           if(!s[j])
  57.           {
  58.            b=j+j-1;
  59.            a=b+j;
  60.            while(a<=i)
  61.            {
  62.             s[a]=1;
  63.             a+=b;
  64.            }
  65.           }
  66.           j++;
  67.          }
  68.          GetSysTime(&bb);
  69.          SubTime(&bb,&aa);
  70.          k=1;
  71.          Printf("%8ld%8ld",1,2);
  72.          for(j=2;j<=i;j++)
  73.           if(!s[j])
  74.           {
  75.            k++;
  76.            if(!(k&7))
  77.             Printf("\n");
  78.            Printf("%8ld",(j<<1)-1);
  79.           }
  80.          Printf("\n(%ld)\n",k+1);
  81.          Printf("(%ld.%05ld s)\n\n",bb.tv_secs,bb.tv_micro);
  82.          FreeVec(s);
  83.         }
  84.        }
  85.        else
  86.         Printf(TXT);
  87.        FreeArgs(rdargs);
  88.       }
  89.       CloseDevice((struct IORequest *)tr);
  90.      }
  91.      FreeVec(tr);
  92.     }
  93.     CloseLibrary(MathIeeeSingBasBase);
  94.    }
  95.    CloseLibrary(MathIeeeSingTransBase);
  96.   }
  97.   CloseLibrary((struct Library *)DOSBase);
  98.  }
  99.  return(0);
  100. }